package com.atguigu.servicebase.responsibilityLinkHandler;

/**
 * @author lwh
 * @description:
 * @date 2023/1/31 9:22
 */
/**
 * 业务逻辑处理器，抽象类
 * @param <T>
 */
public abstract class AbstractBizHandler<T> {
    /**
     * 下一个逻辑处理器
     */
    protected AbstractBizHandler nextHandler;

    public void setNextHandler(AbstractBizHandler nextHandler) {
        this.nextHandler = nextHandler;
    }

    public AbstractBizHandler getNextHandler() {
        return this.nextHandler;
    }

    /**
     * 责任链模式，将各个碎片化的业务逻辑分别处理
     * @param args
     */
    public void handleBizLogic(T args) {
        if (this.onCondition(args)) {
            this.execute(args);
        }

        if (this.nextHandler != null) {
            nextHandler.handleBizLogic(args);
        }
    }

    /**
     * 业务逻辑处理器的业务处理函数
     * @param args
     */
    abstract protected void execute(T args) ;

    /**
     * 某些逻辑在特定条件下才会执行，通过此函数确定是否要执行
     * @param args
     * @return
     */
    protected boolean onCondition(T args) {
        return true;
    }
}